package com.game.framwork.mng;

import android.annotation.SuppressLint;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Rect;
import android.view.SurfaceHolder;
import android.view.SurfaceView;

import com.game.framwork.itf.Graphics;
import com.game_ltdd.GameGame;

@SuppressLint("ViewConstructor")
public class GameFastRenderView extends SurfaceView implements Runnable {
	GameGame game;
	Bitmap framebuffer;
	Thread renderThread = null;
	SurfaceHolder holder;
	volatile boolean running = false;
	
	public GameFastRenderView(GameGame game, Bitmap framebuffer) {
		super(game);
		this.game = game;
		this.framebuffer = framebuffer;
		this.holder = getHolder();
	}
	
	public void resume() {
		running = true;
		renderThread = new Thread(this);
		renderThread.start();
	}
	
	public void run() {
		Graphics g = game.getGraphics();
		Rect dstRect = new Rect();
		long startTime = System.nanoTime();
		while(running) {
			if(!holder.getSurface().isValid())
				continue;
			float deltaTime = (System.nanoTime() - startTime) / 1000000000.0f;
			if (deltaTime >= 1f / 30f) {
				startTime = System.nanoTime();
				game.getCurrentScreen().update(deltaTime);
				game.getCurrentScreen().present(deltaTime, g);
				
				Canvas canvas = holder.lockCanvas();
				canvas.getClipBounds(dstRect);
				canvas.drawBitmap(framebuffer, null, dstRect, null);
				holder.unlockCanvasAndPost(canvas);
			}
		}
	}
	
	public void pause() {
		running = false;
		while(true) {
			try {
				renderThread.join();
				break;
			} catch (InterruptedException e) {
				// retry
				
			}
		}
	}
}
